package com.mh.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mh.dto.vo.R;
import com.mh.pojo.User;
import com.mh.service.UserService;
import com.mh.utils.JWTUtils;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.io.Serializable;
import java.util.Map;

/**
 * 用户表(User)表控制层
 *
 * @author zmh
 * @since 2025-02-08 09:18:50
 */
@RestController
@Slf4j
@CrossOrigin
@RequestMapping("/users")
public class UserController {
    /**
     * 服务对象
     */
    @Autowired
    private UserService userService;

    /**
     * 微信登录
     * @param code 获取临时凭证code
     * @param response ·
     * @return 返回执行结果
     */
    @PostMapping("/login/{code}")
    public R<Object> loginCheck(@PathVariable("code") String code, HttpServletResponse response){
        // 检查登录
        Map<String, Object> resultMap = userService.checkLogin(code);
		if (resultMap.containsKey("errmsg")) {
			return R.errorToken(String.valueOf(resultMap.get("errmsg")));
		}
		if (resultMap.containsKey("token") && resultMap.containsKey("user")) {
            log.info("创建的token为=>{}", resultMap.get("token"));
            // 将token添加入响应头以及返回用户信息
            response.setHeader(JWTUtils.header, (String) resultMap.get("token"));
            log.info(resultMap.get("user")+"");
            return R.success(resultMap.get("user"));
        }
		return R.error("登录失败，请稍后重试");
    }

    /**
     * 分页查询
     *
     * @param page 查询页数
     * @param size 一页显示条数
     * @return ·
     */
    @GetMapping("/page")
    public R<Page<User>> getAllByPage(int page, int size) {
        //执行查询
        return userService.getAllByPage(page, size);
    }

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("{id}")
    public R<User> selectOne(@PathVariable Serializable id) {
        return R.success(this.userService.getById(id));
    }

    /**
     * 新增数据
     *
     * @param user 实体对象
     * @return 新增结果
     */
    @PostMapping
    public R<String> insert(@RequestBody User user) {
        return R.success(this.userService.save(user) + "");
    }

    /**
     * 修改数据
     *
     * @param user 实体对象
     * @return 修改结果
     */
    @PutMapping
    public R<String> update(@RequestBody User user) {
        return R.success(this.userService.updateById(user) + "");
    }

    /**
     * 删除数据
     *
     * @param id 主键结合
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    public R<String> delete(@PathVariable("id") String id) {
        return R.success(this.userService.removeById(id) + "");
    }
}

